import Layout from '@/views/layout'
import Search from '@/views/search'
import SearchList from '@/views/search/list'
import ProDetail from '@/views/prodetail'
import Login from '@/views/login'
import Pay from '@/views/pay'
import MyOrder from '@/views/myorder'
import Home from '@/views/layout/home'
import Category from '@/views/layout/category'
import Cart from '@/views/layout/cart'
import User from '@/views/layout/user'
import store from '@/store'
/**
 * 导入Vue实例，这是Vue框架的核心库。
 * @module vue
 */
import Vue from 'vue'
/**
 * 导入VueRouter实例，这是Vue的路由管理器。
 * @module vue-router
 */
import VueRouter from 'vue-router'

/**
 * 注册VueRouter插件到Vue实例中。这使得Vue实例可以使用路由功能。
 */
Vue.use(VueRouter)

/**
 * 创建一个新的VueRouter实例，用于管理应用中的路由。
 * @param {Object} options - 路由器的配置选项，其中包含了路由的定义。
 */
const router = new VueRouter({
  routes: [
    {
      path: '/login',
      component: Login
    },
    {
      path: '/',
      component: Layout,
      redirect: '/home',
      children: [
        {
          path: '/home',
          component: Home
        },
        {
          path: '/category',
          component: Category
        },
        {
          path: '/cart',
          component: Cart
        },
        {
          path: '/user',
          component: User
        }
      ]
    },
    {
      path: '/search',
      component: Search
    },
    {
      path: '/searchlist',
      component: SearchList
    },
    {
      path: '/prodetail/:id',
      component: ProDetail
    },
    {
      path: '/pay',
      component: Pay
    },
    {
      path: '/myorder',
      component: MyOrder
    }
  ]
})
// 定义一个认证路由数组，用于判断是否需要权限验证
const authUrl = ['/pay', '/myorder']
/**
 * 在路由切换之前进行钩子操作，用于处理权限验证。
 * @param {Object} to - 即将进入的目标路由对象
 * @param {Object} from - 当前的路由对象
 * @param {Function} next - 路由导航函数，用于执行下一步路由导航
 */
router.beforeEach((to, from, next) => {
  // 从store中获取用户令牌
  const token = store.state.user.userInfo.token
  // 检查将要访问的路径是否不需要权限验证
  if (!authUrl.includes(to.path)) {
    // 如果不需要验证，则直接进行路由切换
    next()
    return
  }
  // 如果用户令牌存在，则允许路由切换
  if (token) {
    next()
  } else {
    // 如果用户令牌不存在，则重定向到登录页面
    next('/login')
  }
})
/**
 * 导出创建的VueRouter实例，以便在Vue应用中使用。
 * @exports
 */
export default router
